<p>本章节介绍Meta的属性</p>
<section>
<p><code>abstract</code>(常用)</p>
<p>Options.abstract</p>
<p>如果为True，那么设置该属性的Model为抽象类，在Model继承时用到</p>
<p><code>app_label</code></p>
<p>Options.app_label</p>
<p>指定该Model从属于哪个app，在app外部定义Model时必须设置此属性。默认为app的名字</p>
<p><code>base_manager_name</code></p>
<p>Options.base_manager_name</p>
<p>用于指定Model的_base_manager的名字</p>
<p><code>db_table(常用)</code></p>
<p>Options.db_table</p>
<p>指定Model对应的数据库表名, 默认为app_label_Model的形式</p>
<pre>
db_table = 'music_album'
</pre>
<p><code>db_tablespace</code></p>
<p>Options.db_tablespace</p>
<p>指定Model所属的表空间</p>
<p><code>default_manager_name</code></p>
<p>Options.default_manager_name</p>
<p>指定默认的manager(_default_manager)的名字</p>
<p><code>default_related_name</code>(常用)</p>
<p>Options.default_related_name</p>
<p>指定默认的related_name，默认值为<span><</span>model_name<span>></span>_set</p>
<p><code>get_latest_by</code></p>
<p>Options.get_latest_by</p>
<p>Model中一个可排序字段的名字，在调用latest()和earliest()方法时会用到</p>
<p><code>managed</code></p>
<p>Options.managed</p>
<p>控制运行migrate命令时Django是否会自动创建数据库表</p>
<p><code>order_with_respect_to</code></p>
<p>Options.order_with_respect_to</p>
<p>使得Model可以依据该属性的值来排序。这个属性的值是Model中的关系类型属性的名字。设置了该属性后还会给关联Model额外添加get_RELATED_order()和set_RELATED_order()方法， 设置该属性的Model会添加get_next_in_order()和get_previous_in_order()这2个方法。RELATEDS是Model名。例：</p>
<pre>
from django.db import models

class Question(models.Model):
    text = models.TextField()
    # ...

class Answer(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    # ...

    class Meta:
        order_with_respect_to = 'question'
</pre>
<pre>
>>> question = Question.objects.get(id=1)  # 假定question有3个answer
>>> question.get_answer_order()
[1, 2, 3]
>>> question.set_answer_order([3, 1, 2])
>>> answer = Answer.objects.get(id=2)
>>> answer.get_next_in_order()
<Answer: 3>
>>> answer.get_previous_in_order()
<Answer: 1>
</pre>
<p>ordering</p>
<p>Options.ordering</p>
<p>指定Model的默认排序规则，接受列表形式的值</p>
<pre>
ordering = ['-pub_date', 'author']
</pre>
<p><code>permissions</code></p>
<p>Options.permissions</p>
<p>指定为新创建的实例添加的permissions，接受一个tuple类型的值，每个元素必须是个二元组。第一个元素是perssion的key，第二个元素是描述</p>
<pre>
permissions = (("can_deliver_pizzas", "Can deliver pizzas"),)
</pre>
<p><code>default_permissions</code></p>
<p>Options.default_permissions</p>
<p>指定一个Model默认的permission</p>
<p><code>proxy</code></p>
<p>Options.proxy(常用)</p>
<p>代理继承时会使用</p>
<p><code>required_db_features</code></p>
<p>Options.required_db_features</p>
<p>用于指定数据库必须满足的条件。满足这些条件后，migrate命令才会执行数据库同步。该参数接受一个列表类型的值。例:<code>['gis_enabled']</code></p>
<p>required_db_vendor</p>
<p>Options.required_db_vendor</p>
<p>用于指定数据库的提供商，Django支持的有sqlite, postgresql, mysql, oracle。只有提供商匹配的情况下，migrate命令才会同步数据库</p>
<p><code>unique_together</code></p>
<p>Options.unique_together</p>
<p>用于设定一个unique索引。该属性接受一个tuple类型的值，每个元素也是一个tuple，这个包含了需要unique索引的字段的名字。ManyToManyField类型的字段不能应用于该属性</p>
<pre>
unique_together = (("driver", "restaurant"),)  # 不能有driver和restaurant都相同的实例存在。
</pre>
<p><code>index_together</code></p>
<p>Options.index_together</p>
<p>作用类似unique_together, 用于设置索引</p>
<pre>
index_together = [
    ["pub_date", "deadline"],
]
</pre>
<p><code>verbose_name</code></p>
<p>Options.verbose_name</p>
<p>Model对象的一个人类可读的名字</p>
<p>下面的这几个Meta属性是只读的</p>
<p><code>label</code></p>
<p>Options.label</p>
<p>该属性的值为<code>app_label.object_name</code>形式，例如<code>'polls.Question'</code></p>
<p><code>label_lower</code></p>
<p>Options.label_lower</p>
<p>小写形式的label</p>
</section>